/**
 * Copyright 2014 wasu.com
 *
 *
 * Create on 2015-3-19 下午3:14:20
 */
package xj.toolkit.ebus.unit.zk;

import java.io.InputStream;
import java.util.Properties;

import org.apache.commons.lang3.StringUtils;

import com.google.common.base.Preconditions;

import xj.toolkit.ebus.unit.UnitSource;

/**
 * @author <a href="mailto:caoxiaojian@wasu.com>xiaojian.cao</a>
 * 
 */
public class ZKUnitSource implements UnitSource {

	private String name;
	private long lastModified = System.currentTimeMillis();

	private Properties properties = new Properties();

	/**
	 * @see xj.toolkit.ebus.unit.UnitSource#getName()
	 */
	@Override
	public String getTemplate() {
		return name;
	}

	public String getName() {
		return name;
	}
	
	/**
	 * @param name
	 *            the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @see xj.toolkit.ebus.unit.UnitSource#getExtendsProperties()
	 */
	@Override
	public Properties getExtendsProperties() {
		return properties;
	}

	/**
	 * zk读取到的属性以及属性值放入到properties。
	 * 
	 * @param key
	 * @param value
	 */
	public void addProperties(String key, String value) {
		Preconditions.checkArgument(StringUtils.isNotEmpty(key));
		Preconditions.checkArgument(StringUtils.isNotEmpty(value));

		properties.put(key, value);
	}
	
	/**
	 * 移除。
	 * 
	 * @param key
	 */
	public void removeProperties(String key) {
		Preconditions.checkArgument(StringUtils.isNotEmpty(key));
		
		properties.remove(key);
	}
	
	/**
	 * 检查key是否存在。
	 * 
	 * @param key
	 * @return
	 */
	public boolean checkPropertyExist(String key) {
		Preconditions.checkArgument(StringUtils.isNotEmpty(key));
		
		return properties.containsKey(key);
	}
	
	/**
	 * 得到属性值。
	 * 
	 * @param key
	 */
	public String getProperty(String key){
		Preconditions.checkArgument(StringUtils.isNotEmpty(key));
		
		return properties.getProperty(key);
	}

	/**
	 * @see xj.toolkit.ebus.unit.UnitSource#getInputStream()
	 */
	@Override
	public InputStream getInputStream() {
		return null;
	}

	/**
	 * @see xj.toolkit.ebus.unit.UnitSource#lastModified()
	 */
	@Override
	public long lastModified() {
		return lastModified;
	}

	public void updateLastModified() {
		this.lastModified = System.currentTimeMillis();
	}

	/**
	 * @see xj.toolkit.ebus.unit.UnitSource#getType()
	 */
	@Override
	public String getType() {
		return "cfg";
	}

}
